package com.ants.boot.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.JSONLibDataFormatSerializer;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import java.util.List;
import java.util.Map;

/**
 * @author 蚂蚁会花呗
 * @date 2021/7/20 16:12
 * 阿里巴巴 fast-json 工具类
 */
public class FastJsonUtils {

    private static final SerializeConfig config;

    static {
        config = new SerializeConfig();
        config.put(java.util.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
        config.put(java.sql.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
    }
    private static final SerializerFeature[] features = {
            //输出空置字段
            SerializerFeature.WriteMapNullValue,
            //list字段如果为null，输出为[]，而不是null
            SerializerFeature.WriteNullListAsEmpty,
            //数值字段如果为null，输出为0，而不是null
            SerializerFeature.WriteNullNumberAsZero,
            //Boolean字段如果为null，输出为false，而不是null
            SerializerFeature.WriteNullBooleanAsFalse,
            //字符类型字段如果为null，输出为""，而不是null
            SerializerFeature.WriteNullStringAsEmpty
    };

    /**
     * 将一个对象转换为json字符串
     * @param object
     * @return
     */
    public static String toJSONString(Object object){
        return JSON.toJSONString(object,config,features);
    }

    /**
     * 将一个对象转换为json字符串 不格式化null 等值
     * @param object
     * @return
     */
    public static String toJSONStringNoFeatures(Object object){
        return JSON.toJSONString(object,config);
    }

    /**
     * 将Json字符串转换为实例
     * */
    public static <T> T toJavaBean(String jsonStr,Class<T> t){
        return JSON.parseObject(jsonStr,t);
    }

    /**
     * 将Json转换为指定类型的List
     * */
    public static <T> List<T> toList(String jsonStr, Class<T> t){
        return JSON.parseArray(jsonStr,t);
    }

    /**
     * 将Json字符串转换为Map
     * */
    public static <T> Map<String,Object> toMap(String jsonStr){
        return (Map<String, Object>) JSONObject.parseObject(jsonStr);
    }

    /**
     * 将map 对象转为jsonObject 对象
     * @param map
     * @return
     */
    public static JSONObject toJSONObject(Map<String,Object> map){
        String jsonStr = toJSONString(map);
        return JSON.parseObject(jsonStr);
    }

}
